package br.com.dufs.mvc.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import br.com.dufs.mvc.model.ComposicaoFamiliar;
import br.com.dufs.mvc.model.Entrevistado;
import br.com.dufs.mvc.service.EntrevistadoBOService;

@Controller
public class EntrevistadoMB {

	private boolean entrevistaNable = false;
	private boolean entrevistaDisble = true;

	private ComposicaoFamiliar composicaoFamiliar;

	@Autowired
	EntrevistadoBOService entrevistadoBOService;

	private Entrevistado entrevistado = new Entrevistado();

	private DataModel listaEntrevistados;
	private DataModel listaCompFam;

	private List<ComposicaoFamiliar> compFamList = new ArrayList<ComposicaoFamiliar>();

	public DataModel getListar() {
		List<Entrevistado> lista = entrevistadoBOService.todos();
		listaEntrevistados = new ListDataModel(lista);
		return listaEntrevistados;
	}

	public Entrevistado getEntrevistado() {
		return entrevistado;
	}

	public void setEntrevistado(Entrevistado entrevistado) {
		this.entrevistado = entrevistado;
	}

	public void prepararAdicionar(ActionEvent actionEvent) {
		this.entrevistado = new Entrevistado();
	}

	public void prepararAlterar(ActionEvent actionEvent) {
		this.entrevistado = (Entrevistado) (this.listaEntrevistados
				.getRowData());
	}

	public boolean isEntrevistaNable() {
		return entrevistaNable;
	}

	public void setEntrevistaNable(boolean entrevistaNable) {
		this.entrevistaNable = entrevistaNable;
	}

	public boolean isEntrevistaDisble() {
		return entrevistaDisble;
	}

	public void setEntrevistaDisble(boolean entrevistaDisble) {
		this.entrevistaDisble = entrevistaDisble;
	}

	public String excluir() {

		Entrevistado entrevistadoTemp = (Entrevistado) (this.listaEntrevistados
				.getRowData());
		entrevistadoBOService.excluir(entrevistadoTemp);
		return "entrevista";

	}

	public void preparaEntrevista() {
		composicaoFamiliar = new ComposicaoFamiliar();
		setEntrevistaNable(true);
		setEntrevistaDisble(false);

	}

	public String adicionar() {

		if (compFamList.size() > 0) {
			entrevistado.setListaCompFam(compFamList);
		}
		entrevistadoBOService.salvar(entrevistado);
		getEntrevistadoSessao();

		return "entrevista2";

	}

	public void alterar(ActionEvent actionEvent) {

		

	}

	public DataModel getListaCompFam() {
		listaCompFam = new ListDataModel(compFamList);
		return listaCompFam;
	}

	public void excluirCompFamilia() {

		ComposicaoFamiliar compFamTemp = (ComposicaoFamiliar) (this.listaCompFam
				.getRowData());
		compFamList.remove(compFamTemp);

	}

	public void setListaFamilia() {
		composicaoFamiliar.setEntrevistado(entrevistado);
		this.compFamList.add(composicaoFamiliar);
		composicaoFamiliar = new ComposicaoFamiliar();
	}

	public ComposicaoFamiliar getComposicaoFamiliar() {
		return composicaoFamiliar;
	}

	public void setComposicaoFamiliar(ComposicaoFamiliar composicaoFamiliar) {
		this.composicaoFamiliar = composicaoFamiliar;
	}

	public String resetar() {
		entrevistaDisble = true;
		entrevistaNable = false;
		entrevistado = new Entrevistado();
		compFamList = new ArrayList<ComposicaoFamiliar>();

		return "entrevista";
	}

	public void getEntrevistadoSessao() {

		FacesContext facesContext = FacesContext.getCurrentInstance();
		if (entrevistado == null) {
			FacesMessage facesMessage = new FacesMessage(
					"Erro nos dados fornecidos");
			facesContext.addMessage("aviso", facesMessage);

		} else {

			HttpSession session = (HttpSession) facesContext
					.getExternalContext().getSession(true);
			session.setAttribute("cpfTitular", this.entrevistado.getCpf());

		}
	}

}
